Я только что начал свой первый проект на языке C на малине pi 3, и я хочу создать свое первое графическое приложение для сенсорной панели. Моя цель - запустить цикл while (1), который контролирует ввод-вывод малины и функцию gtk_main, чтобы открыть простое окно.gtk_main() рядом с (1) Raspberry Pi 3
После вызова gtk_main() остальная часть кода не работает. Я знаю, что это вызвано тем, что gtk_main создает собственный цикл. Есть ли способ запустить эти две петли одновременно?
#include <stdio.h> // Used for printf() statements
#include <wiringPi.h> // Include WiringPi library!
#include <gtk/gtk.h>
// Pin number declarations. We're using the Broadcom chip pin numbers.
const int pwmPin = 18; // PWM LED - Broadcom pin 18, P1 pin 12
const int ledPin = 23; // Regular LED - Broadcom pin 23, P1 pin 16
const int butPin = 21; // Active-low button - Broadcom pin 17, P1 pin 11
const int pwmValue = 0; // Use this to set an LED brightness
int main(int argc, char *argv[]){
int add = 0;
int sign = 1;
// Setup stuff:
wiringPiSetupGpio(); // Initialize wiringPi -- using Broadcom pin numbers
pinMode(pwmPin, PWM_OUTPUT); // Set PWM LED as PWM output
pinMode(ledPin, OUTPUT); // Set regular LED as output
pinMode(butPin, INPUT); // Set button as INPUT
pullUpDnControl(butPin, PUD_UP); // Enable pull-up resistor on button
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main();
// Loop (while(1)):
while(1)
{
if (digitalRead(butPin)) // Button is released if this returns 1
{
pwmWrite(pwmPin, pwmValue+add); // PWM LED at bright setting
digitalWrite(ledPin, LOW); // Regular LED off
add=add+(sign*50);
if (add==1000) sign=-1;
if (add==0) sign=1;
delay(50);
}
else // If digitalRead returns 0, button is pressed
{
pwmWrite(pwmPin, 1024 - pwmValue); // PWM LED at dim setting
// Do some blinking on the ledPin:
digitalWrite(ledPin, HIGH); // Turn LED ON
delay(75); // Wait 75ms
digitalWrite(ledPin, LOW); // Turn LED OFF
delay(75); // Wait 75ms again
}
}
}
Не эксперт GTK, но вы должны рассмотреть возможность использования многозадачности для этого. – LPs