Problema desafio Arduino + Servo - Ajuda

Bom dia Pessoal, Tudo bem ? Estou cursando ciências da computação e hoje meu professor passou um desafio para ser programado com os seguintes componentes:

  • 1x Arduino UNO
  • 1x Servo Motor
  • 1x Sensor Capacitivo

Segue a problemática: Existe uma sistema automático que faz a faca ir da esquerda para a direta, a faca está presa em um suporte cujo mesmo está conectado em um servo motor que consegue altar a sua altura ( Cima e baixo ), do outro lado um sensor capacitivo que identifica a distancia da faca até a carne em 1cm. O problema é que a carne é irregular, quando a mesma aumenta o tamanho a faca deve levantar para manter o 1cm de diferença e quando desce a faca deve descer para manter a distancia ( 1cm de diferença ). O Sensor capacitivo apenas identifica quando está a 1cm, porem se estiver a menos ele mantem o sinal positivo, ou seja, precisa ter uma programa que fica mandando levantar e descer continuamente para ficar na transição entre aceso e apagado o led ( Sinal do sensor ) e quando a carne aumenta o tamanho ele tem que continuar os 1cm Acredito que igual aqueles carrinhos que segue linha ( muda 1 graus para esquerda e 1 para direita, quando muda 1 graus e nao encontra começa 1-2-4-8-16, até manter a proporção )

Alguém poderia me ajudar com esse problemas ( Segue foto em anexo ) https://postimg.org/image/mo709fjcd/

Muito obrigado,

Atenciosamente Micheli

O que é que já fizeste??

Já pensaste em usar interrupções? Já pensaste em estruturar o código para que quando estiveres a ver se o sensor é activado, o tempo de ciclo é o minimo possível?

Já pensaste em parar o sistema quando o sensor foi activado e deixou de ser activado?

Fiz o segiunte codigo, aparentemente da certo porem parece esta meio bugado, nao sei.
Quando o sensor ve a carne sobre e quando nao ve desce e fica subindo e descendo sem parar
O que acha ?
Tem como melhorar ?

#include <Servo.h>

// Variaveis que não muda
Servo motor; // Criar uma variavel motor com a biblioteca Servo
const int buttonPin = 10; // Determina o sinal de entrada do sensor na porta 10 digital
const int ledPin =  13; // Determina a saida no led da placa, porta 13

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
int x = 0; // Valor Minimo e maximo é 90

void setup() 
{ 
 motor.attach(3); // Entrada de sinal do motor no pino 3 digital
 pinMode(ledPin, OUTPUT);
 pinMode(buttonPin, INPUT);
 motor.write(x); 
} 
void loop() 
{ 
  
 buttonState = digitalRead(buttonPin);
 delay(100);
 
    while (buttonState == HIGH && x>=0 && x<=120) {
        digitalWrite(ledPin, HIGH);
        motor.write(x);
        delay(10); 
        buttonState = digitalRead(buttonPin);
        x=x+1;
        }
   while (buttonState == LOW && x>=1 && x<=121) {
        digitalWrite(ledPin, LOW);
        motor.write(x);
        delay(10); 
        buttonState = digitalRead(buttonPin);
        x=x-1;
        }        
        
  delay(10); 
}